﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者：王明亮
 * 创建时间：2023/8/28 15:48:23
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace CreateType
{
    /// <summary>
    /// 抽象工厂类，提供创建不同类型房子的接口
    /// </summary>
    public abstract class AbstractFactory
    {
        /// <summary>
        /// 抽象工厂提供创建一系列产品的接口——抽象方法，这里作为例子，只给出了房顶、地板、窗户和房门创建接口
        /// 【1】房顶创建接口
        /// </summary>
        /// <returns></returns>
        public abstract Roof CreateRoof();
        /// <summary>
        /// 【2】地板创建接口
        /// </summary>
        /// <returns></returns>
        public abstract Floor CreateFloor();
        /// <summary>
        /// 【3】窗户创建接口
        /// </summary>
        /// <returns></returns>
        public abstract Window CreateWindow();
        /// <summary>
        /// 【4】房门创建接口
        /// </summary>
        /// <returns></returns>
        public abstract Door CreateDoor();
    }
    
    #region 可以分离出来到单独Class文件的产品接口
    /// <summary>
    /// 房顶抽象类，子类的房顶必须继承该类
    /// </summary>
    public abstract class Roof
    {
        /// <summary>
        /// 创建房顶
        /// </summary>
        public abstract void Create();
    }

    /// <summary>
    /// 地板抽象类，子类的地板必须继承该类
    /// </summary>
    public abstract class Floor
    {
        /// <summary>
        /// 创建地板
        /// </summary>
        public abstract void Create();
    }

    /// <summary>
    /// 窗户抽象类，子类的窗户必须继承该类
    /// </summary>
    public abstract class Window
    {
        /// <summary>
        /// 创建窗户
        /// </summary>
        public abstract void Create();
    }

    /// <summary>
    /// 房门抽象类，子类的房门必须继承该类
    /// </summary>
    public abstract class Door
    {
        /// <summary>
        /// 创建房门
        /// </summary>
        public abstract void Create();
    }

    #endregion
}
